package initialize

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/schema"
	"liuche17.cn/go-blog/server/global"
	"time"
)

func GormMysql() *gorm.DB {
	m := global.GB_CONFIG.MySQL
	if m.Dbname == "" {
		return nil
	}
	mysqlConfig := mysql.Config{
		DSN:                       m.Dsn(), // DSN data source name
		DefaultStringSize:         191,     // string 类型字段的默认长度
		SkipInitializeWithVersion: true,    // 根据版本自动配置
	}
	db, err := gorm.Open(mysql.New(mysqlConfig), &gorm.Config{
		CreateBatchSize: 500, // 批量插入一次性的数据行数
		NamingStrategy: schema.NamingStrategy{
			TablePrefix:   "t_", // 自动拼接表明前缀
			SingularTable: true, // 使用哦单数表名
		},
		DisableForeignKeyConstraintWhenMigrating: true, // 禁用物理外键（一般是逻辑外键）
	})
	if err != nil {
		return nil
	}

	db.InstanceSet("gorm:table_options", "ENGINE="+m.Engine)
	sqlDB, _ := db.DB()
	sqlDB.SetMaxIdleConns(m.MaxIdleConns) // 最大空闲连接数
	sqlDB.SetMaxOpenConns(m.MaxOpenConns) // 最大连接数
	sqlDB.SetConnMaxLifetime(time.Hour)   // 最大可复用时间
	fmt.Println("初始化数据库成功！")
	return db
}
